package com.special.threademo.concurrency.conditionDemo;

import com.sun.org.apache.bcel.internal.generic.NEW;

import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.TimeUnit;

/**
 * Created with IDEA2020.3
 * author:LiuYC
 * DateTime:2021/1/19  17:36
 * 语义得理解：五个都到了才开始执行
 * await（） 等待和触发得语义
 * 可以恢复到最初得状态，可以重用也就是说！
 */
public class CyclicBarriers {
    public static void main(String[] args) {
//        CyclicBarriers cyclicBarriers = new CyclicBarrier(3);
        CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
        for (int i = 0; i < 3; i++) {
            new Thread(() -> {
                try {
                    Thread.sleep((long) Math.random() * 2000);
                    int i1 = new Random().nextInt();
                    System.out.println("hell0" + i1);
                    cyclicBarrier.await();
                    // 不同得表示方法 以及源码层面得保证
                    cyclicBarrier.await(20,TimeUnit.SECONDS);
                    System.out.println("world" + i1);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}
